/**
 * Copyright (c) 2008, Andrew Carter
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, are 
 * permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer. Redistributions in binary form must reproduce 
 * the above copyright notice, this list of conditions and the following disclaimer in 
 * the documentation and/or other materials provided with the distribution. Neither the 
 * name of Andrew Carter nor the names of contributors may be used to endorse or promote 
 * products derived from this software without specific prior written permission. 
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 
 * SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 
 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package com.acarter.scenemonitor.textdescriptor;

import com.acarter.scenemonitor.textdescriptor.definitions.BlendStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.ClipStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.ColorMaskStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.ControllerDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.CullStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.DynamicPhysicsNodeDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.FogStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.FragmentProgramStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.GLSLShaderStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.GeometryDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.LightStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.MaterialStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.NodeDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.PhysicsCollisionGeometryDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.RenderStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.ShadeStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.SpatialDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.StaticPhysicsNodeDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.StencilStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.TextureStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.VertexProgramStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.WireframeStateDescriptor;
import com.acarter.scenemonitor.textdescriptor.definitions.ZBufferStateDescriptor;
import com.jme.scene.Controller;
import com.jme.scene.Geometry;
import com.jme.scene.Node;
import com.jme.scene.Spatial;
import com.jme.scene.state.BlendState;
import com.jme.scene.state.ClipState;
import com.jme.scene.state.ColorMaskState;
import com.jme.scene.state.CullState;
import com.jme.scene.state.FogState;
import com.jme.scene.state.FragmentProgramState;
import com.jme.scene.state.GLSLShaderObjectsState;
import com.jme.scene.state.LightState;
import com.jme.scene.state.MaterialState;
import com.jme.scene.state.RenderState;
import com.jme.scene.state.ShadeState;
import com.jme.scene.state.StencilState;
import com.jme.scene.state.TextureState;
import com.jme.scene.state.VertexProgramState;
import com.jme.scene.state.WireframeState;
import com.jme.scene.state.ZBufferState;
import com.jmex.physics.DynamicPhysicsNode;
import com.jmex.physics.PhysicsCollisionGeometry;
import com.jmex.physics.StaticPhysicsNode;


/**
 * Adds the default descriptors including those for the jME Physics objects.
 * 
 * @author Carter
 *
 */
public class PhysicsDescriptorHandler extends A_TextDescriptorHandler {

	/**
	 * Add descriptors.
	 */
	@Override
	public void initDescriptors() {

		registerDescriptor(Spatial.class, new SpatialDescriptor());
		registerDescriptor(Node.class, new NodeDescriptor());
		registerDescriptor(Geometry.class, new GeometryDescriptor());
		registerDescriptor(RenderState.class, new RenderStateDescriptor());
		registerDescriptor(Controller.class, new ControllerDescriptor());

		registerDescriptor(BlendState.class, new BlendStateDescriptor());
		registerDescriptor(ClipState.class, new ClipStateDescriptor());
		registerDescriptor(ColorMaskState.class, new ColorMaskStateDescriptor());
		registerDescriptor(CullState.class, new CullStateDescriptor());
		registerDescriptor(FogState.class, new FogStateDescriptor());
		registerDescriptor(FragmentProgramState.class, new FragmentProgramStateDescriptor());
		registerDescriptor(GLSLShaderObjectsState.class, new GLSLShaderStateDescriptor());
		registerDescriptor(LightState.class, new LightStateDescriptor());
		registerDescriptor(MaterialState.class, new MaterialStateDescriptor());
		registerDescriptor(ShadeState.class, new ShadeStateDescriptor());
		registerDescriptor(StencilState.class, new StencilStateDescriptor());
		registerDescriptor(TextureState.class, new TextureStateDescriptor());
		registerDescriptor(VertexProgramState.class, new VertexProgramStateDescriptor());
		registerDescriptor(WireframeState.class, new WireframeStateDescriptor());
		registerDescriptor(ZBufferState.class, new ZBufferStateDescriptor());

		registerDescriptor(PhysicsCollisionGeometry.class, new PhysicsCollisionGeometryDescriptor());
		registerDescriptor(StaticPhysicsNode.class, new StaticPhysicsNodeDescriptor());
		registerDescriptor(DynamicPhysicsNode.class, new DynamicPhysicsNodeDescriptor());
	}
}
